package com.sg.dto.biz.finance.req;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * @desc ImplementTargetFinancialAccountPlusMinusExpensesComReqDto
 * @使用场景
 */
@Data
public class ImplementTargetFinancialAccountPlusMinusExpensesComReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 账户操作类型 ADD_BUDGET:增预算 DEC_BUDGET:减预算 USE_BUDGET:使用预算 AVAILABLE_AMOUNT_EXPENDITURE:可用金额支出 AVAILABLE_AMOUNT_INCOME:可用金额收入
     */
    @NotNull(message = "账户操作类型不能为空")
    @ApiModelProperty("账户操作类型")
    private String accountOptType;

    /**
     * 账户标识
     */
    @NotNull(message = "账户标识不能为空")
    @ApiModelProperty("账户标识")
    private String accountCode;

    /**
     * 账户类型 POOL_ACCOUNT:发行账户 ECOLOGICAL_ACCOUNT:生态账户
     */
    @NotNull(message = "账户类型不能为空")
    @ApiModelProperty("账户类型")
    private String accountTypeCode;

    /**
     * 认证状态 UNCERTIFICATED:未认证 AUTHENTICATED:已认证 AUTHENTICATION_FAILURE:认证失败
     */
    @NotNull(message = "认证状态不能为空")
    @ApiModelProperty("认证状态")
    private String certificationStatus;

    /**
     * 是否预算账户 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否预算账户不能为空")
    @ApiModelProperty("是否预算账户")
    private String isBudgetAccount;

    /**
     * 是否统计账户 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否统计账户不能为空")
    @ApiModelProperty("是否统计账户")
    private String isStatisticalAccount;

    /**
     * 生态账户类型编码 ORG_POOL_ACCOUNT:组织发行账户 TARGET_CONTENT_ACCOUNT:目标内容账户
     */
    @NotNull(message = "生态账户类型编码不能为空")
    @ApiModelProperty("生态账户类型编码")
    private String ecologicalAccountTypeCode;

    /**
     * 账户关联主体分类类型 CONTENT_TYPE:内容分类 ORGANIZATIONAL_STRUCTURE_TYPE:组织架构分类
     */
    @NotNull(message = "账户关联主体分类类型不能为空")
    @ApiModelProperty("账户关联主体分类类型")
    private String accountObjectClass;

    /**
     * 上级账户归属主体标识
     */
    @ApiModelProperty("上级账户归属主体标识")
    private String parentAccountContentCode;

    /**
     * 关联归属主体ID
     */
    @NotNull(message = "关联归属主体ID不能为空")
    @ApiModelProperty("关联归属主体ID")
    private String accountObjectId;

    /**
     * 关联归属主体类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 DEPT:部门
     */
    @NotNull(message = "关联归属主体类型编码不能为空")
    @ApiModelProperty("关联归属主体类型编码")
    private String accountObjectTypeCode;

    /**
     * 关联归属主体标识
     */
    @NotNull(message = "关联归属主体标识不能为空")
    @ApiModelProperty("关联归属主体标识")
    private String accountContentCode;

    /**
     * 主题内容ID
     */
    @ApiModelProperty("主题内容ID")
    private String themeContentId;

    /**
     * 主题内容类型编码 ORG_OR_DEPT:组织或部门 INTELLIGENT_HARDWARE_EQUIPMENT:智能硬件设备 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表 OMS_MESSAGE_CHANNEL:通道表 OMS_ORG_ORGANIZATION:组织表 OMS_PROJECT:项目表 OMS_ORG_DEPT:部门表 OMS_QUESTION:问题表 OMS_OFFICIAL_DOCUMENT:公文表 OMS_VIRTUAL_ORG:虚拟组织表 OMS_MESSAGE:消息表 OMS_MESSAGE_LOCATION:消息位置表 OMS_MESSAGE_MEMBER:成员接收消息表 OMS_MESSAGE_MEMBER_CHANNEL_RELATION:成员通道关系表
     */
    @ApiModelProperty("主题内容类型编码")
    private String themeContentTypeCode;

    /**
     * 发行体系类型编码 CAPITAL_SYSTEM:资金体系 INTEGRAL_SYSTEM:积分体系
     */
    @ApiModelProperty("发行体系类型编码")
    private String distributionSystemTypeCode;

    /**
     * 是否组织正式财务标准 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否组织正式财务标准不能为空")
    @ApiModelProperty("是否组织正式财务标准")
    private String isOrgOfficialAccountNom;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @NotNull(message = "主体生命周期不能为空")
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 收支类型 INCOME:收入 SPENDING:支出
     */
    @NotNull(message = "收支类型不能为空")
    @ApiModelProperty("收支类型")
    private String billTypeCode;

    /**
     * 收支方式 ONLINE_PAYMENT:在线支付 PAY_DELIVERY:货到付款 CASH:现金 ON_CREDIT:赊账 TALLY:记账
     */
    @NotNull(message = "收支方式不能为空")
    @ApiModelProperty("收支方式")
    private String billMethod;

    /**
     * 账单金额
     */
    @NotNull(message = "账单金额不能为空")
    @ApiModelProperty("账单金额")
    private Double billAmount;

    /**
     * 账单状态 UNDERWAY:进行中 COMPLETE:完成 CLOSE:关闭
     */
    @NotNull(message = "账单状态不能为空")
    @ApiModelProperty("账单状态")
    private String billStatus;

    /**
     * 是否发生方账单 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否发生方账单不能为空")
    @ApiModelProperty("是否发生方账单")
    private String isOriginBill;

    /**
     * 是否对接财务 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否对接财务不能为空")
    @ApiModelProperty("是否对接财务")
    private String isButtFinance;

    /**
     * 冗余内容科目ID
     */
    @ApiModelProperty("冗余内容科目ID")
    private String contnetAccountSubjectld;

    /**
     * 冗余资金来源ID
     */
    @ApiModelProperty("冗余资金来源ID")
    private String capitalSourceId;

    /**
     * 流水业务故事信息
     */
    @NotNull(message = "流水业务故事信息不能为空")
    @ApiModelProperty("流水业务故事信息")
    private String billBizStory;

    /**
     * 对方logo
     */
    @ApiModelProperty("对方logo")
    private String oppositeLogo;

    /**
     * 对方名称
     */
    @NotNull(message = "对方名称不能为空")
    @ApiModelProperty("对方名称")
    private String oppositeName;

    /**
     * 对方账户ID
     */
    @ApiModelProperty("对方账户ID")
    private String oppositeAccountId;

    /**
     * 对方账户余额
     */
    @ApiModelProperty("对方账户余额")
    private Double oppositeAccountBalance;

    /**
     * 对方账户归属主体ID
     */
    @ApiModelProperty("对方账户归属主体ID")
    private String oppositeObjectId;

    /**
     * 对方账户归属主体类型编码
     */
    @ApiModelProperty("对方账户归属主体类型编码")
    private String oppositeObjectTypeCode;

    /**
     * 对方支付渠道账户（账户编码）
     */
    @ApiModelProperty("对方支付渠道账户（账户编码）")
    private String oppositeAccountCode;

    /**
     * 对方支付渠道账户名称
     */
    @ApiModelProperty("对方支付渠道账户名称")
    private String oppositeAccountName;

    /**
     * 对方银行开户行名称
     */
    @ApiModelProperty("对方银行开户行名称")
    private String oppositeOpeningBankName;

    /**
     * 支付渠道 ALIPAY:支付宝 WE_CHAT_PAY:微信支付 BANK_CARD:银行卡
     */
    @ApiModelProperty("支付渠道")
    private String payChannel;

    /**
     * 支付渠道支付单号
     */
    @ApiModelProperty("支付渠道支付单号")
    private String payChannelOrderNo;

    /**
     * 关联业务单据对象ID
     */
    @ApiModelProperty("关联业务单据对象ID")
    private String bizBillObjectId;

    /**
     * 关联业务单据对象类型 TRADING_ORDER:交易订单 WITHDRAWAL_DOCUMENT:提现单 PROJECT:项目
     */
    @ApiModelProperty("关联业务单据对象类型")
    private String bizBillObjectTypeCode;

    /**
     * 费用科目类型
     */
    @ApiModelProperty("费用科目类型")
    private String accountSubjectTypeCode;

    /**
     * 费用科目ID
     */
    @ApiModelProperty("费用科目ID")
    private String accountSubjectId;

    /**
     * 记录结算引擎ID
     */
    @ApiModelProperty("记录结算引擎ID")
    private String expensesSettleEngineId;

}
